4D Chart v13

Crear gráficos a partir de arrays (ejemplos)

Inicio

 
4D Chart v13
Crear gráficos a partir de arrays (ejemplos)

Crear gráficos a partir de arrays (ejemplos)  


 

 

Esta sección ofrece ejemplos que utilizan la función CT Chart arrays para la creación de gráficos de dos y tres dimensiones.

Si desea crear gráficos por programación a partir de los registros de una base, consulte la sección Crear gráficos a partir de registros (ejemplos).

En cada ejemplo, encontrará:

  • Una descripción de la situación utilizada como ejemplo,
  • La estructura de la base de datos del ejemplo,
  • Un gráfico creado en su totalidad por programación, utilizando los datos del ejemplo,
  • El código utilizado para crear el gráfico de ejemplo.

Supongamos que usted es un nuevo gerente en la división de ingeniería de una empresa que fabrica gadgets. Una de sus nuevas responsabilidades es disminuir el tiempo que los departamentos se toman para responder a las peticiones de los clientes que buscan ayuda.

Usted decide diseñar una base de datos para controlar el tiempo de respuesta de cada departamento. La estructura de su base de datos es el siguiente:

Para analizar la información reunida, usted decide graficar los tiempos de respuesta promedio ((Fecha de finalización - Fecha de solicitud) / # de peticiones) de cada departamento para cada mes del año pasado. Utilizando 4D Chart, se hace el siguiente gráfico:

Este gráfico se generó y recibió el formato utilizando el método GR RESPONSE. Este método llena los arrays con datos, genera un gráfico a partir de los arrays y luego personaliza ciertos aspectos del gráfico, tal como los títulos de los ejes y los colores de las series.

La primera parte del método utiliza los comandos y funciones de 4D para crear y llenar los arrays. Usted introduce el contenido del array Categorías, el contenido del array Series se toma directamente de la base de datos y el contenido del array Valores es el resultado de la manipulación de datos. El tamaño del array Valores es igual al tamaño del array Categorías multiplicado por el tamaño del array Series.

Este método utiliza conjuntos para manipular la selección de registros. Después de haber creado un conjunto, puede cambiar la selección de registros según sea necesario al buscar y luego regresar al conjunto original de registros tantas veces como sea necesario. En este método, se utiliza un conjunto para mantener la selección de registros para todo el gráfico. La selección se modifica durante el llenado del array Valores, porque los valores son determinados por la selección que resulta de la búsqueda de los registros de cada departamento para cada mes.

Una vez llenos los arrays, los comandos 4D Chart se utilizan para crear el gráfico y modificar sus características.

El siguiente es el método GR RESPONSE:

 
  `Método: GRAPH RESPONSE
  `Categorías: Meses del año
  `Series: Nombres de los departamentos
  `Valores: Duración promedio de la tarea (en días)
 
 C_LONGINT($x;$y;$z;$Counter)
 C_LONGINT($Left;$Top;$Right;$Bottom)
 C_LONGINT($Left2;$Top2;$Right2;$Bottom2)
 C_LONGINT($Area;$Chart;$Title;$Locate;$Duration;$Color;$Font)
 
  `Definir y llenar el array categorías
 ARRAY STRING(3;$aCategories;12)
 $aCategories{1}:="Jan"
 $aCategories{2}:="Feb"
 $aCategories{3}:="Mar"
 $aCategories{4}:="Apr"
 $aCategories{5}:="May"
 $aCategories{6}:="Jun"
 $aCategories{7}:="Jul"
 $aCategories{8}:="Aug"
 $aCategories{9}:="Sep"
 $aCategories{10}:="Oct"
 $aCategories{11}:="Nov"
 $aCategories{12}:="Dec"
 
  `Generar la selección de registros a representar gráficamente
  `Almacenar los registros en un conjunto para utilizarlos posteriormente
 QUERY BY FORMULA([Response Time];Year of([Response Time]Request Date)=1993)
 CREATE SET([Response Time];"sChartData")
 
  `Definir y llenar el array Series con los nombres de los departamentos
 ARRAY STRING(20;$aSeries;0)
 DISTINCT VALUES([Response Time]Department;$aSeries)
 
  `Determinar el número de valores a graficar
  `(number of values = categories * series)
  `Dimensionar el array Valores
 ARRAY REAL($aValues;12*Size of array($aSeries))
 
  `Llenar el array Valores
  `Para cada departamento buscar la duración de tarea promedio por mes
 $Counter:=0 `contador para hacer seguimiento de valores
 For($x;1;Size of array($aSeries)) `… bucle para el número de departamentos
    For($y;1;12) `… bucle para los 12 meses
       $Counter:=$Counter+1
       QUERY SELECTION([Response Time];[Response Time]Department=$aSeries{$x})
       QUERY SELECTION BY FORMULA([Response Time];Month of([Response Time]Request Date)=$y)
       If(Records in selection([Response Time])>0)
          $Duration:=0 `contador para la duración de los incrementos
          For($z;1;Records in selection([Response Time]))
             GOTO SELECTED RECORD([Response Time];$z)
             $Duration:=$Duration+([Response Time]Completion Date-[Response Time]Request Date)
          End for
          $aValues{$Counter}:=$Duration/Records in selection([Response Time])
       End if
       USE SET("sChartData") `Restauración de la selección original de registros
    End for
 End for
 
  `Ocultar elementos de interfaz
 CT SET DISPLAY(Area;1;0) `Ocultar menús
 CT SET DISPLAY(Area;2;0) `Ocultar herramientas gráficas
 CT SET DISPLAY(Area;3;0) `Ocultar herramientas Objeto
 CT SET DISPLAY(Area;6;0) `Ocultar barras de desplazamiento
 CT SET DISPLAY(Area;9;0) `Ocultar reglas
 
  `Crear un gráfico en columnas
 $Chart:=CT Chart arrays(Area;2;1;$aCategories;$aSeries;$aValues)
 
  `Añadir los títulos de los ejes de categorías y de valores
 CT SET TITLE ATTRIBUTES(Area;$Chart;2;2;3;"Tiempos de respuesta en días")
 CT SET TITLE ATTRIBUTES(Area;$Chart;0;3;0;"Mes de la petición")
 
  `Definir los colores de las series (Verde, Amarillo, Azul)
 CT SET CHART FILL ATTRIBUTES(Area;$Chart;8;100;3;CT Index to color(10))
 CT SET CHART FILL ATTRIBUTES(Area;$Chart;8;200;3;CT Index to color(2))
 CT SET CHART FILL ATTRIBUTES(Area;$Chart;8;300;3;CT Index to color(7))
 
  `Definir la posición de la leyenda arriba al centro, orientación horizontal
 CT SET LEGEND ATTRIBUTES(Area;$Chart;1;0;0;0;7;0;0)
 
  `Añadir un título en la esquina superior izquierda
 $Title:=CT Draw text(Area;1;1;300;3;"Tiempo de respuesta promedio por departamento")
 
  `Dar formato al título (Palatino, 14 puntos, Negrita, Centrado, Negro)
 $Color:=CT Index to color(16)
 $Font:=CT Font number("Palatino")
 CT SET TEXT ATTRIBUTES(Area;$Title;$Font;14;1;$Color;1)
 
  `Obtener las dimensiones del área para centrar
 CT GET AREA BOUNDARY(Area;1;$Left;$Top;$Right;$Bottom)
 
  `Redimensionar el gráfico al tamaño de la ventana menos 50 puntos
 CT SIZE(Area;$Chart;$Right-50;$Bottom-50)
 
  `Centrar el gráfico
 CT GET BOUNDARY(Area;$Chart;$Left2;$Top2;$Right2;$Bottom2)
 $Locate:=(($Right-$Left)-($Right2-$Left2))/2
 CT MOVE(Area;$Chart;$Locate;$Top2)
 
  `Centrar el título
 CT GET BOUNDARY(Area;$Title;$Left2;$Top2;$Right2;$Bottom2)
 $Locate:=(($Right-$Left)-($Right2-$Left2))/2
 CT MOVE(Area;$Title;$Locate;$Top2)
 
  `Mover el gráfico 10 puntos hacia abajo
 CT GET BOUNDARY(Area;$Chart;$Left;$Top;$Right;$Bottom)
 CT MOVE(Area;$Chart;$Left;$Top+10)
 
  `Deseleccionar todos los objetos
 CT SELECT(Area;-1;0)

Suponga que usted es Director Regional de un programa educativo y que le gustaría determinar si los resultados de las pruebas de los estudiantes en su región han mejorando. Su base de datos contiene los puntajes de los estudiantes en su región, indicando la fecha de la prueba y el departamento.

Nota: la base de datos de ejemplo es la misma utilizada en el ejemplo de Crear un gráfico de dos dimensiones con las series definidas por los datos contenidos en registros, en la sección Crear gráficos a partir de registros (ejemplos).

Como había varias fechas de prueba en cada año, no se puede graficar los datos directamente a partir de la base de datos. En cambio, usted crea un método que ubica los datos en arrays, permitiéndole utilizar cada año como una categoría y los departamentos individuales como series.

Este gráfico se generó utilizando el método GRAPH SCORES 3D. Este método llena los arrays con datos, genera un gráfico a partir de los arrays y luego personaliza ciertos aspectos del gráfico.

El contenido del array Categorías se introduce directamente en el código. El contenido del array Series se toma de la base de datos. El contenido del array Valores son los promedios de los puntajes de cada departamento para cada año. El tamaño del array Valores es igual al tamaño del array Categorías multiplicado por el tamaño del array Series.

Utilizando comandos 4D Chart, la barra de menús 4D Chart, las barras de desplazamiento, las reglas y las paletas de herramientas se ocultan. El área 4D Chart está ´definida como no editable, lo que significa que el usuario no puede seleccionar cualquier objeto en el área o ni modificarlo.

El siguiente es el método GRAPH SCORES 3D:

  `Método: GRAPH SCORES 3D
  `Categorías: Años de la encuesta
  `Series: Departamentos miembros
  `Valores: Probrar resultados
 
 C_LONGINT($x;$y;$z;$Counter)
 C_LONGINT($Left;$Top;$Right;$Bottom)
 C_LONGINT($Left2;$Top2;$Right2;$Bottom2)
 C_LONGINT($Area;$Chart;$Title;$Locate;$Score;$Color;$Font;$Rect)
 
  `Definir y llenar el array categorías
 ARRAY STRING(4;$aCategories;2)
 $aCategories{1}:="1992"
 $aCategories{2}:="1993"
 
  `Definir y llenar el array Series con los nombres de los departamentos
 ALL RECORDS([Test Scores])
 ARRAY STRING(2;$aSeries;0)
 DISTINCT VALUES([Test Scores]State;$aSeries)
 
  `Dimensionar el array Valores
  `(número de valores a graficar = categorías*series)
 ARRAY REAL($aValues;2*Size of array($aSeries))
 
  `Determinar y llenar el array Valores
  `Para cada departamento, buscar el resultado promedio
 $Counter:=0 `contador para hacer seguimiento a los valores
 For($x;1;Size of array($aSeries)) `… bucle para el número de departamentos
    For($y;1;2) `… bucle para los 2 años
       $Counter:=$Counter+1
       QUERY([Test Scores];[Test Scores]State=$aSeries{$x})
       QUERY SELECTION BY FORMULA([Test Scores];
       String(Year of([Test Scores]Test Date))=$aCategories{$y})
       If(Records in selection([Test Scores])>0)
          $Score:=0 `guarda el total de los resultados
          For($z;1;Records in selection([Test Scores]))
             GOTO SELECTED RECORD([Test Scores];$z)
             $Score:=$Score+[Test Scores]Score
          End for
  `Calcular el resultado promedio
          $aValues{$Counter}:=$Score/Records in selection([Test Scores])
       End if
    End for
 End for
 
  `Restaurar selección
 ALL RECORDS([Test Scores])
 
  `Ocultar elementos de interfaz
 CT SET DISPLAY(Area;1;0) `Ocultar menús
 CT SET DISPLAY(Area;2;0) `Ocultar herramientas gráficas
 CT SET DISPLAY(Area;3;0) `Ocultar herramientas de objetos
 CT SET DISPLAY(Area;6;0) `Ocultar barras de desplazamiento
 CT SET DISPLAY(Area;9;0) `Ocultar reglas
 
  `Crear un gráfico en columnas 3D
 $Chart:=CT Chart arrays(Area;100;1;$aCategories;$aSeries;$aValues)
 
  `Ocultar/mostrar los títulos de los ejes
 CT SET TITLE ATTRIBUTES(Area;$Chart;0;3;0;"Año de pruebas")
 CT SET TITLE ATTRIBUTES(Area;$Chart;1;1;0;"State") `Ocultar título
 CT SET TITLE ATTRIBUTES(Area;$Chart;2;2;3;"Resultado promedio (en Puntos)")
 
  `Definir la posición de la leyenda arriba al centro, orientación horizontal
 CT SET LEGEND ATTRIBUTES(Area;$Chart;1;0;0;0;7;0;0)
 
  `Añadir un título de gráfico en la esquina superior izquierda
 $Title:=CT Draw text(Area;1;1;350;3;"Resultados de las pruebas del departamento miembro")
 
  `Dar formato al título del gráfico (Geneva, 14 puntos, Negrita, Centrado, Azul)
 $Color:=CT Index to color(7)
 $Font:=CT Font number("Geneva")
 CT SET TEXT ATTRIBUTES(Area;$Title;$Font;14;1;$Color;1)
 
  `Obtener las dimensiones de la ventana para centrar
 CT GET AREA BOUNDARY(Area;1;$Left;$Top;$Right;$Bottom)
 
  `Redimensionar el gráfico al tamaño de la ventana menos 50 puntos
 CT SIZE(Area;$Chart;$Right-50;$Bottom-50)
 
  `Centrar el gráfico
 CT GET BOUNDARY(Area;$Chart;$Left2;$Top2;$Right2;$Bottom2)
 $Locate:=(($Right-$Left)-($Right2-$Left2))/2
 CT MOVE(Area;$Chart;$Locate;$Top2)
 
  `Centrar el título horizontalmente
 CT GET BOUNDARY(Area;$Title;$Left2;$Top2;$Right2;$Bottom2)
 $Locate:=(($Right-$Left)-($Right2-$Left2))/2
 CT MOVE(Area;$Title;$Locate;$Top2)
 
  `Mover el gráfico 10 puntos hacia abajo desde el título
 CT GET BOUNDARY(Area;$Chart;$Left;$Top;$Right;$Bottom)
 CT MOVE(Area;$Chart;$Left;$Top+10)
 
  `Enmarcar el gráfico y el título con un rectángulo gris
 $Rect:=CT Draw rectangle(Area;$Left-2;$Top2-2;$Right+2;$Bottom+2+10;0)
 CT SET FILL ATTRIBUTES(Area;$Rect;3;CT Index to color(13))
 
  `Centrar todos los objetos verticalmente
 CT GET AREA BOUNDARY(Area;1;$Left;$Top;$Right;$Bottom)
 CT GET BOUNDARY(Area;-1;$Left2;$Top2;$Right2;$Bottom2)
 $Locate:=(($Bottom-$Top)-($Bottom2-$Top2))/2
 CT MOVE(Area;-1;$Left2;$Locate)
 
  `Enviar el rectángulo atrás
 CT SELECT(Area;-1;0) `Deseleccionar todo
 CT SELECT(Area;$Rect;1) `Seleccionar rectángulo
 CT DO COMMAND(Area;24002) `enviar atrás
 CT SELECT(Area;-1;0) `Deseleccionar todo
 
 'Deseleccionar todos los objetos
 CT SELECT(Area;-1;0

 
PROPIEDADES 

Producto: 4D Chart
Tema: Introducción al lenguaje

 
VER TAMBIÉN 

Crear gráficos a partir de registros (ejemplos)